typedef struct
{
	u8 boot1_hash[20];
	u8 common_key[16];
	u32 ng_id;
	union {
		 struct {
			 u8 ng_priv[30];
			 u8 _wtf1[18];
		 };
		 struct {
			 u8 _wtf2[28];
			 u8 nand_hmac[20];
		 };
	};
	u8 nand_key[16];
	u8 rng_key[16];
	u32 unk1;
	u32 unk2; // 0x00000007
} __attribute__((packed)) otp_t;

typedef struct
{
	u8 boot2version;
	u8 unknown1;
	u8 unknown2;
	u8 pad;
	u32 update_tag;
	u16 checksum;
} __attribute__((packed)) eep_ctr_t;

typedef struct
{
	union {
		struct {
			u32 ms_id;
			u32 ca_id;
			u32 ng_key_id;
			u8 ng_sig[60];
			eep_ctr_t counters[2];
			u8 fill[0x18];
			u8 korean_key[16];
		};
		u8 data[256];
	};
} __attribute__((packed)) seeprom_t;

typedef struct {
	char	text[0x100];
	u8		boot1Hash[20];
	u8		commonKey[16];
	u32		consoleID;
	union {
		struct {
			u8 privateKey[30];
			u8 _wtf1[18];
		};
		struct {
			u8 _wtf2[28];
			u8 nandHmac[20];
		};
	};
	u8 		nandKey[16];
	u8 		rngKey[16];
	u32 	unk1;
	u32 	unk2; // 0x00000007
	char 	blank[136];
	u32		ngKeyID;
	u8		ngSig[60];
	char 	blank2[440];
	
} keys;

int keydump();